home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 02 (1982-10)(Softdisk)(Side B).do / TEXT.OTHELLO.bas < prev    next >
BASIC Source File  |  1996-12-24  |  7KB  |  294 lines

  1. 120  DIM A(20,20),I4(8),J4(8),C$(8),D$(2)
  2. 125  DIM X$(10)
  3. 130  TEXT : HOME : VTAB 10: HTAB 5
  4. 140  PRINT "GREETINGS FROM OTHELLO": PRINT : PRINT 
  5. 150  PRINT "DO YOU WANT INSTRUCTIONS (Y OR N) ";
  6. 160  INPUT X$
  7. 170  IF X$ = "N"  THEN 390
  8. 180  IF X$ < >"Y"  THEN 160
  9. 190  HOME 
  10. 200  PRINT "OTHELLO IS PLAYED ON AN 8 X 8 CHECKER   BOARD."
  11. 210  PRINT : PRINT "ROWS NUMBERED 1 TO 8 AND COLUMNS  A TO H"
  12. 220  PRINT : PRINT "THE INITIAL CONFIGURATION IS BLANK,"
  13. 230  PRINT "EXCEPT FOR THE FOUR CENTER SQUARES,"
  14. 235  PRINT "WHICH FORM THE PATTERN...": PRINT 
  15. 250  PRINT "        0 X"
  16. 260  PRINT "        X O"
  17. 270  PRINT : PRINT "HIT ANY KEY TO CONTINUE";: GET A$
  18. 275  HOME 
  19. 280  PRINT "TRY TO PLACE YOUR PIECE SO THAT IT": PRINT "OUTFLANKS MINE."
  20. 290  PRINT : PRINT "CREATING A HORIZONTAL, VERTICAL, OR"
  21. 300  PRINT "DIAGONAL RUN OF MY PIECES BOUNDED ON"
  22. 310  PRINT "EACH END BY AT LEAST ONE OF YOURS."
  23. 320  PRINT : PRINT "THIS WILL FLIP MY PIECES,": PRINT "TURNING THEM INTO YOURS."
  24. 330  PRINT : PRINT "NOTE: YOU MUST CAPTURE AT LEAST ONE OF"
  25. 340  PRINT "MY PIECES IN THIS WAY IF IT IS AT ALL": PRINT "POSSIBLE."
  26. 350  PRINT : PRINT "IF IT IS NOT POSSIBLE, YOU FORFEIT YOUR"
  27. 360  PRINT "TURN BY ENTERING 0,0 FOR YOUR (ROW,COL) MOVE."
  28. 370  PRINT : PRINT "HIT ANY KEY TO CONTINUE";: GET A$
  29. 390  HOME : VTAB 6: PRINT "I TAKE SEVERAL SECONDS TO MAKE MY MOVE.": VTAB 8: PRINT "SHOULD I WAIT BEFORE MAKING MY MOVES": PRINT "(Y OR N)";
  30. 400 F2 = 0
  31. 410  INPUT X$
  32. 420  IF X$ = "N"  THEN 460
  33. 430  IF X$ < >"Y"  THEN 410
  34. 440 F2 = 1
  35. 460  PRINT : PRINT "SHOULD I PLAY MY BEST STRATEGY": PRINT "(Y OR N) ";
  36. 470 S2 = 0
  37. 480  INPUT X$
  38. 490  IF X$ = "N"  THEN 520
  39. 500  IF X$ < >"Y"  THEN 480
  40. 510 S2 = 2
  41. 520 B =  -1
  42. 530 W =  +1
  43. 540 D$(B +1) = "X"
  44. 550 D$(O +1) = "."
  45. 560 D$(W +1) = "O"
  46. 570  FOR K = 1 TO 8
  47. 580  READ I4(K)
  48. 590  NEXT K
  49. 600  DATA  0,-1,-1,-1,0,1,1,1 
  50. 610  FOR K = 1 TO 8
  51. 620  READ J4(K)
  52. 630  NEXT K
  53. 640  DATA  1,1,0,-1,-1,-1,0,1
  54. 650  FOR K = 1 TO 8
  55. 660  READ C$(K)
  56. 670  NEXT K
  57. 680  DATA  A,B,C,D,E,F,G,H
  58. 690 I = 1
  59. 700  REM 
  60. 710  FOR J = O TO 9
  61. 720 A(I,J) = 0
  62. 730  NEXT J
  63. 740 I = I +1: IF I <10  THEN 700
  64. 750 A(4,4) = W
  65. 760 A(5,5) = W
  66. 770 A(4,5) = B
  67. 780 A(5,4) = B
  68. 790 C1 = 2
  69. 800 H1 = 2
  70. 810 N1 = 4
  71. 820 Z = 0
  72. 830  REM  HUMANS CHOICES
  73. 840  PRINT "DO YOU WANT TO HAVE X OR O";
  74. 850 C = W
  75. 860 H = B
  76. 870  INPUT X$
  77. 880  IF X$ = "X"  THEN 920
  78. 890  IF X$ < >"O"  THEN 870
  79. 900 C = B
  80. 910 H = W
  81. 920  PRINT "DO YOU WANT TO GO FIRST (Y OR N)";
  82. 930  INPUT X$
  83. 940  IF X$ = "N"  THEN 1020
  84. 950  IF X$ < >"Y"  THEN 930
  85. 960  REM  PRINT INITIAL BOARD
  86. 970  GOSUB 3100
  87. 980  GOTO 1690
  88. 990  REM  COMPUTERS MOVE
  89. 1000  IF F2 = 0  THEN 1020
  90. 1010  INPUT X$
  91. 1020 B1 =  -1
  92. 1030 I3 = 0:J3 = 0
  93. 1040 T1 = C
  94. 1050 T2 = H
  95. 1060  REM  SCAN FOR BLANK SQUARE
  96. 1065 I = 1
  97. 1070  REM 
  98. 1080  FOR J = 1 TO 8
  99. 1090  IF A(I,J) < >0  THEN 1380
  100. 1100  REM  FOUND A BLANK SQUARE
  101. 1110  REM   DOES IT HAVE AN OPPONENT AS A NEIGHBOR? 
  102. 1120  GOSUB 2620
  103. 1130  IF F1 = 0  THEN 1380
  104. 1140  REM  FOUND AN OPPONENT OR A NEIGHBOR
  105. 1150  REM  HOW MANY PIECES CAN WE FLIP?
  106. 1160  REM  (DON'T DO IT NOW)
  107. 1170 U =  -1
  108. 1180  GOSUB 2820
  109. 1190  REM  EXTRA POINTS FOR BOUNDRY POSITION
  110. 1200  IF S1 = 0  THEN 1380
  111. 1210  IF (I -1) *(I -8) < >0  THEN 1230
  112. 1220 S1 = S1 +S2
  113. 1230  IF (J -1) *(J -8) < >0  THEN 1260
  114. 1240 S1 = S1 +S2
  115. 1250  REM  IS THIS BETTER THAN THE BEST SO FAR
  116. 1260  IF S1 <B1  THEN 1380
  117. 1270  IF S1 >B1  THEN 1340
  118. 1280  REM  A TIE; RANDOM DECISION
  119. 1290  REM  THE NEXT EXECUTABLE STATEMENT CAN BE DELETED
  120. 1310 R =  RND(1)
  121. 1320  IF R >.5  THEN 1380
  122. 1340 B1 = S1
  123. 1350 I3 = I
  124. 1360 J3 = J
  125. 1380  NEXT J
  126. 1390 I = I +1: IF I <9  THEN 1070
  127. 1410  IF B1 >0  THEN 1480
  128. 1430  PRINT "I HAVE TO FORFEIT MY MOVE"
  129. 1440  IF Z = 1  THEN 2190
  130. 1450 Z = 1
  131. 1460  GOTO 1690
  132. 1470  REM   MAKE THE MOVE
  133. 1480 Z = 0
  134. 1490  PRINT "I WILL MOVE TO ";
  135. 1500  PRINT I3;
  136. 1510  PRINT ", ";
  137. 1520  PRINT C$(J3)
  138. 1530 I = I3
  139. 1540 J = J3
  140. 1550 U = 1
  141. 1560  GOSUB 2820
  142. 1570 C1 = C1 +S1 +1
  143. 1580 H1 = H1 -S1
  144. 1590 N1 = N1 +1
  145. 1600  PRINT "THAT GIVES ME ";
  146. 1610  PRINT S1;
  147. 1620  PRINT " OF YOUR PIECES"
  148. 1630  REM  PRINT OUT BOARD
  149. 1640  GOSUB 3100
  150. 1650  REM   TEST FOR END OF GAME
  151. 1660  IF H1 = 0  THEN 2190
  152. 1670  IF N1 = 64  THEN 2190
  153. 1680  REM   HUMAN'S MOVE
  154. 1690 T1 = H
  155. 1700 T2 = C
  156. 1710  PRINT "YOUR MOVE -- (ROW,COL) ";
  157. 1720  INPUT I,X$
  158. 1730  IF I <0  THEN 1720
  159. 1740  IF I >8  THEN 1720
  160. 1750  IF I < >0  THEN 1820
  161. 1760  PRINT "ARE YOU FORFETRING YOUR TURN (Y OR N) ";
  162. 1770  INPUT X$
  163. 1780  IF X$ < >"Y"  THEN 1710
  164. 1790  IF Z = 1  THEN 2190
  165. 1800 Z = 1
  166. 1810  GOTO 1000
  167. 1820  FOR J = 1 TO 8
  168. 1830  IF C$(J) = X$  THEN 1870
  169. 1840  NEXT J
  170. 1850  GOTO 1720
  171. 1860  REM    CHECK IF BLANK
  172. 1870  IF A(I,J) = 0  THEN 1910
  173. 1880  PRINT "SORRY, THAT SQUARE IS OCCUPIED; TRY AGAIN"
  174. 1890  GOTO 1720
  175. 1900  REM   CHECK FOR LEGAL NEIGHBOR
  176. 1910  GOSUB 2620
  177. 1920  IF F1 = 1  THEN 1970
  178. 1930  PRINT "SORRY, YOU ARE NOT NEXT TO ONE OF MY PIECES;"
  179. 1940  PRINT " TRY AGAIN"
  180. 1950  GOTO 1720
  181. 1960  REM    CHECK IF LEGAL RUN 
  182. 1970 U =  -1
  183. 1980  GOSUB 2820
  184. 1990  IF S1 >0  THEN 2030
  185. 2000  PRINT "SORRY, THAT DOESN'T FLANK A ROW; TRY AGAIN"
  186. 2010  GOTO 1720
  187. 2020  REM   EVERYTHING LEGAL  MAKE HMAN'S MOVE
  188. 2030 Z = 0
  189. 2040  PRINT "THAT GIVES YOU ";
  190. 2050  PRINT S1;
  191. 2060  PRINT " OF MY PIECES"
  192. 2070 U = 1
  193. 2080  GOSUB 2820
  194. 2090 H1 = H1 +S1 +1
  195. 2100 C1 = C1 -S1
  196. 2110 N1 = N1 +1
  197. 2120  REM   PRINT OUT BOARD
  198. 2130  GOSUB 3100
  199. 2140  REM   TEST FOR END OF GAME
  200. 2150  IF C1 = 0  THEN 2190
  201. 2160  IF N1 = 64  THEN 2190
  202. 2170  GOTO 1000
  203. 2180  REM   END OF GAME WRAPUP
  204. 2190  PRINT 
  205. 2200  PRINT "YOU HAVE ";
  206. 2210  PRINT H1;
  207. 2220  PRINT " PIECES AND I HAVE ";
  208. 2230  PRINT C1
  209. 2240  PRINT " PIECES--"
  210. 2250  IF H1 = C1  THEN 2290
  211. 2260  IF H1 >C1  THEN 2310
  212. 2270  PRINT "SORRY, I WON TAHT ONE."
  213. 2280  GOTO 2320
  214. 2290  PRINT "A TIE !!"
  215. 2300  GOTO 2500
  216. 2310  PRINT "YOU WON IT!!!"
  217. 2320 C1 = C1 -H1
  218. 2330  IF C1 >0  THEN 2350<CTRL-A><CTRL-L>@$<CTRL-I>C1 =  -C1
  219. 2350 C1 = (64 *C1)/N1
  220. 2360  PRINT "THAT WAS A ";
  221. 2370  IF C1 <11  THEN 2490
  222. 2380  IF C1 <25  THEN 2470
  223. 2390  IF C1 <39  THEN 2450
  224. 2400  IF C1 <53  THEN 2430
  225. 2410  PRINT "PERFECT GAME"
  226. 2420  GOTO 2500
  227. 2430  PRINT "WALKAWAY"
  228. 2440  GOTO 2500
  229. 2450  PRINT "FIGHT"
  230. 2460  GOTO 2500
  231. 2470  PRINT "HOT GAME !"
  232. 2480  GOTO 2500
  233. 2490  PRINT " A SQUEEKER !!"
  234. 2500  PRINT 
  235. 2510  PRINT "DO YOU WANT TO PLAY ANOTHER GAME (Y OR N) ";
  236. 2520  INPUT X$
  237. 2530  IF X$ = "Y"  THEN  GOTO 690
  238. 2540  IF X$ < >"N"  THEN 2520
  239. 2550  PRINT "THANKS FOR PLAYING"
  240. 2560  END 
  241. 2620  FOR I1 =  -1 TO 1
  242. 2630  FOR J1 =  -1 TO 1
  243. 2640  IF A(I +I1,J +J1) = T2  THEN 2710
  244. 2650  NEXT J1
  245. 2660  NEXT I1
  246. 2670  REM  NO T2 FOUND FAILURE
  247. 2680 F1 = 0
  248. 2690  RETURN 
  249. 2700  REM  SUCCESS
  250. 2710 F1 = 1
  251. 2720  RETURN 
  252. 2730  REM  SUBROUTINE SCORE-AND-UPDATE
  253. 2820 S1 = 0
  254. 2830  FOR K = 1 TO 8
  255. 2840 I5 = I4(K)
  256. 2850 J5 = J4(K)
  257. 2860 I6 = I +I5
  258. 2870 J6 = J +J5
  259. 2880 S3 = 0
  260. 2890  IF A(I6,J6) < >T2  THEN 3070
  261. 2900  REM  LOOP THRU THE RUN  
  262. 2910 S3 = S3 +1
  263. 2920 I6 = I6 +I5
  264. 2930 J6 = J6 +J5
  265. 2940  IF A(I6,J6) = T1  THEN 2970
  266. 2950  IF A(I6,J6) = 0  THEN 3070
  267. 2960  GOTO 2910
  268. 2970 S1 = S1 +S3
  269. 2980  IF U < >1  THEN 3070
  270. 2990  REM  UPDATE BOARD
  271. 3000 I6 = I
  272. 3010 J6 = J
  273. 3020  FOR K1 = 0 TO S3
  274. 3030 A(I6,J6) = T1
  275. 3040 I6 = I6 +I5
  276. 3050 J6 = J6 +J5
  277. 3060  NEXT K1
  278. 3070  NEXT K
  279. 3080  RETURN 
  280. 3090  REM  SUBROUTINE PRINT-BOARD
  281. 3100  INVERSE : PRINT 
  282. 3110  PRINT "   A  B  C  D  E  F  G  H"
  283. 3120  FOR I = 1 TO 8
  284. 3130  PRINT I;
  285. 3140  FOR J = 1 TO 8
  286. 3150  PRINT "  ";
  287. 3160  PRINT D$(A(I,J) +1);
  288. 3170  NEXT J
  289. 3180  PRINT 
  290. 3190  NEXT I
  291. 3200  PRINT 
  292. 3205  NORMAL 
  293. 3210  RETURN 
  294. 3220  END